/**
 * 初始化设备
 * 
 * @param port
 *            端口,0-usb device0,1-usb device1
 * @returns 状态
 */
function init_proc(port) {
	if(!rfobj){
		alert("读卡器异常,请检查!");
	}
	var status = rfobj.rfid_init_usb(port);
	// alert(status);
	rfobj.beep(port, 2);
	return status;
}
/**
 * 关闭设备
 * 
 * @param port
 *            端口,0-usb device0,1-usb device1
 * @returns 状态
 */
function exit_proc(port) {
	var status = rfobj.rfid_exit_usb(port);
	// alert(status);
	return status;
}

/**
 * 寻卡
 * 
 * @param port
 *            端口,0-usb device0,1-usb device1
 * @returns 寻卡后返回卡序列号
 */
function search_card(port) {
	rfobj.rfid_search_card(port);
	//alert(rfobj.rfid_card_seria_number);
	return rfobj.rfid_card_seria_number;
}
/**
 * 装载密码
 * 
 * @param port
 *            端口,0-usb device0,1-usb device1
 * @param ab
 *            1-A密码，2-B密码 ，默认1
 * @param sct
 *            扇区 0~15,默认 1
 * @param keyIndex
 *            密码套 1-第一套 2-第二套3-第三套 ，默认1
 * @param key
 *            密码 默认 FFFFFFFFFFFF
 * @returns 返回状态
 */
function rfid_load_key(port, ab, sct, keyIndex, key) {
	var x, y, rfid_mode, rfid_sector;
	x = ab;
	if (ab) {
		x = ab;
	} else {
		x = 1;
	}
	if (keyIndex) {
		y = keyIndex;
	} else {
		y = 1;
	}
	if (sct) {
		rfid_sector = sct;
	} else {
		rfid_sector = 1;
	}
	rfid_sector = sct;
	rfid_mode = x * y - 1;
	if (!key) {
		key = "FFFFFFFFFFFF";
	}
	var rfid_key = key;

	// 装载密码
	var return_msg = rfobj.load_key(port, rfid_mode, rfid_sector, rfid_key);
	// alert(rfid_mode+" 装载密码"+rfid_sector+" "+return_msg);
	return return_msg;
}

/**
 * 验证密码
 * 
 * @param port
 *            端口,0-usb device0,1-usb device1
 * @param ab
 *            1-A密码，2-B密码 ，默认1
 * @param sct
 *            扇区 0~15,默认 1
 * @param keyIndex
 *            密码套 1-第一套 2-第二套3-第三套 ，默认1
 * @returns 返回状态
 */
function pass_check(port, ab, sct, keyIndex) {
	var x, y, rfid_mode, rfid_sector;
	x = ab;
	if (ab) {
		x = ab;
	} else {
		x = 1;
	}
	if (keyIndex) {
		y = keyIndex;
	} else {
		y = 1;
	}
	if (sct) {
		rfid_sector = sct;
	} else {
		rfid_sector = 1;
	}
	rfid_sector = sct;
	rfid_mode = x * y - 1;

	// 验证密码
	var ret = rfobj.rfid_auth(port, rfid_mode, rfid_sector);
	// alert(rfid_mode+"验证密码方法 "+rfid_sector+" "+ret);
	return ret;
}
/**
 * 读取卡信息
 * 
 * @param port
 *            端口,0-usb device0,1-usb device1
 * @param blockIndex
 *            块索引 扇区索引*4+块位置(0~3)，如：第一扇区第一块的块索引为 1*4+0=4,默认4，即第一扇区第一块
 * @returns 转成10进制的数据
 */
function read_rfid(port, blockIndex) {
	var data_buf = rfobj.rfid_read(port, blockIndex);
	return data_buf;
}
/**
 * 转16进制
 * 
 * @param asc
 * @returns 16进制
 */
function convert_hex(asc) {
	return EncodeHex(asc);
}
/**
 * 设备蜂鸣
 * 
 * @param port
 *            端口,0-usb device0,1-usb device1
 */
function rfid_beep(port) {
	rfobj.beep(port, 20);
}
/**
 * 写入数据
 * @param port
 *            端口,0-usb device0,1-usb device1
 * @param blockIndex
 *            块索引 扇区索引*4+块位置(0~3)，如：第一扇区第一块的块索引为 1*4+0=4,默认4，即第一扇区第一块
 * @param data
 *            写入的数据，字符串
 * @returns
 */
function write_rfid(port, blockIndex, data) {
	var hexData = EncodeHex(data);
	var ret = rfobj.rfid_write(port, blockIndex, hexData);
	// alert(ret+"写卡方法返回值");
	return ret;
}

var digitArray = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
		'a', 'b', 'c', 'd', 'e', 'f');

function toHex(n) {

	var result = '';
	var start = true;

	for ( var i = 32; i > 0;) {
		i -= 4;
		var digit = (n >> i) & 0xf;

		if (!start || digit != 0) {
			start = false;
			result += digitArray[digit];
		}
		;
	}

	return (result == '' ? '0' : result);
}

function pad(str, len, pad) {
	var result = str;

	for ( var i = str.length; i < len; i++) {
		result = pad + result;
	}

	return '' + result;

}

function ntos(n) {

	n = n.toString(16);
	if (n.length == 1)
		n = "0" + n;
	n = "%" + n;

	return unescape(n);

}

function EncodeHex(src_str) {

	var str = src_str;
	var result = "";

	for ( var i = 0; i < str.length; i++) {

		if (str.substring(i, i + 1).match(/[^\x00-\xff]/g) != null) {
			result += escape(str.substring(i, i + 1), 1).replace(/%/g, '\\');
		} else {
			result += pad(toHex(str.substring(i, i + 1).charCodeAt(0) & 0xff),
					2, '0');
		}
	}
	var xx = result;
	for ( var i = xx.length; i < 32; i++) {
		result = result + '0';
	}
	return result;
}

function DecodeHex(encoded_str) {

	var str = encoded_str;
	var ret = "";
	var tmpst = "";

	for ( var i = 0; i < str.length; i = i + 2) {
		tmpst = str.substring(i, i + 2);
		ret = ret + String.fromCharCode(parseInt(tmpst, 16));
	}

	return ret;
}
